class Solution {
public:
    long long maxSum(vector<int>& nums, int m, int k) {
        int n=nums.size();
        unordered_map<long long,long long> hash;
        double ans=0,sum=0,same=0;
        for(int left=0,right=0;right<n;++right)
        {
            ++hash[nums[right]];
            if(hash[nums[right]]>1) ++same;
            sum+=nums[right];
            while(left<right&&right-left+1>k)
            {
                if(--hash[nums[left]]==0) hash.erase(nums[left]);
                else --same;
                sum-=nums[left++];
            }
            if(hash.size()>=m&&hash.size()+same==k)
            {
                ans=max(ans,sum);
            }
        }
        return ans;
    }
};
